package cn.cxq.learning.stack;

import org.junit.jupiter.api.Test;

import java.util.Stack;

/**
 * 用两个栈实现队列
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 64M，其他语言128M 热度指数：833857
 * 本题知识点： 栈
 *  算法知识视频讲解
 * 题目描述
 * 用两个栈来实现一个队列，完成队列的Push和Pop操作。 队列中的元素为int类型。
 */
public class VirtualQueue {

    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    @Test
    public void test() {
        VirtualQueue queue = new VirtualQueue();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        queue.push(4);
        System.out.println(queue.pop());
        System.out.println(queue.pop());
        System.out.println(queue.pop());
        System.out.println(queue.pop());
    }

    public void push(int node) {
        stack1.push(node);
    }

    public int pop() {

        while (stack1.size() != 1) {
            stack2.push(stack1.pop());
        }

        Integer result = stack1.pop();

        while (!stack2.empty()) {
            stack1.push(stack2.pop());
        }

        return result;
    }
}
